<?php

namespace Lazzaroni\UsuarioBundle\Controller;

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Lazzaroni\UsuarioBundle\Form\UsuarioType;
use Lazzaroni\UsuarioBundle\Entity\Usuario;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller {

    public function indexAction() {
        return $this->render('UsuarioBundle:Default:portada.html.twig');
    }

    public function estaticaAction($pagina) {

        $estaticas = array("ayuda", "sobrenosotros", "contacto", "privacidad");
        if (in_array($pagina, $estaticas)) {
            return $this->render('UsuarioBundle:Estaticas:' . $pagina . '.html.twig');
        } else {
            return new RedirectResponse($this->generateUrl('portada'));
        }
    }

    public function registroAction() {

        $peticion = $this->getRequest();
        $sesion = $peticion->getSession();
        $this->buscarMensajes($peticion);

        $usuario = new Usuario();
        $usuario->setFechaAlta(new \DateTime('today'));
        $usuario->setUltimaConexion(new \DateTime('today'));


        $formulario = $this->createForm(new UsuarioType(), $usuario);
        if ($peticion->getMethod() == 'POST') {
            $formulario->bind($peticion);
            if ($formulario->isValid()) {
                $encoder = $this->get('security.encoder_factory')->getEncoder($usuario);
                $usuario->setSalt(md5(time()));

                $passwordCodificado = $encoder->encodePassword($usuario->getPassword(), $usuario->getSalt());

                $usuario->setPassword($passwordCodificado);
                
                $usuarioDAO= $this->get('usuario.usuarioDAO');
                $usuarioDAO->registrarUsuario($usuario);


                $this->get('session')->getFlashBag()->add('exitos', 'Registro Exitoso!');


                $token = new UsernamePasswordToken($usuario, $usuario->getPassword(), 'usuarios', $usuario->getRoles());
                $this->container->get('security.context')->setToken($token);


                return $this->redirect($this->generateUrl('portada'));
            }
        }
        return $this->render('UsuarioBundle:Default:registro.html.twig', array('formulario' => $formulario->createView()));
    }

    public function despedidaAction() {

        $peticion = $this->getRequest();
        return $this->redirect($this->generateUrl('portada'));
    }

    private function buscarMensajes(Request $peticion) {
        $sesion = $peticion->getSession();

        if ($peticion->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $peticion->attributes->get(
                    SecurityContext::AUTHENTICATION_ERROR
            );
        } else {
            $error = $sesion->get(SecurityContext::AUTHENTICATION_ERROR);
            $sesion->remove(SecurityContext::AUTHENTICATION_ERROR);
        }

        if (!empty($error)) {
            $this->get('session')->getFlashBag()->add('error', $error);
        }
    }

    /**
     * LoginAction es el metodo que procesa las peticiones tanto de inicio de session
     * como de registro de usuarios. Hay que usarlo para symfony2.
     */
    public function portadaAction(Request $peticion) {
        $sesion = $peticion->getSession();
        $this->buscarMensajes($peticion);

        return $this->render('UsuarioBundle:Default:portada.html.twig', array(
                    'last_username' => $sesion->get(SecurityContext::LAST_USERNAME)));
    }

    public function perfilAction($username) {
//aca
        $usuarioDAO= $this->get('usuario.usuarioDAO');
        $usuario=$usuarioDAO->cargarPerfilUsuario($username);
        return $this->render('UsuarioBundle:Default:perfilUsuario.html.twig', array('username' => $usuario->getUsername(), 'usuario' => $usuario));
    }

    public function editarPerfilAction() {

        $usuario = $this->get('security.context')->getToken()->getUser();
        $formulario = $this->createForm(new UsuarioType(), $usuario);
        $peticion = $this->getRequest();

        if ($peticion->getMethod() == 'POST') {
            $passwordOriginal = $formulario->getData()->getPassword();
            $formulario->bind($peticion);
            if ($formulario->isValid()) {

                if (null == $usuario->getPassword() || false == $formulario->getData()->cambiar_password) {
                    $usuario->setPassword($passwordOriginal);
                } else {
                    $encoder = $this->get('security.encoder_factory')
                            ->getEncoder($usuario);
                    $passwordCodificado = $encoder->encodePassword(
                            $usuario->getPassword(), $usuario->getSalt()
                    );
                    $usuario->setPassword($passwordCodificado);
                }

                                
                $usuarioDAO= $this->get('usuario.usuarioDAO');
                $usuarioDAO->actualizarUsuario($usuario);
                
                $this->get('session')->setFlash('exitos', 'Los datos de tu perfil se han actualizado correctamente');
                return $this->redirect($this->generateUrl('usuario_perfil'));
            }
        }
        return $this->render('UsuarioBundle:Default:editarPerfil.html.twig', array('usuario' => $usuario, 'formulario' => $formulario->createView()));
    }

}
